contents

리눅스 파일 시스템은 데이터가 저장되고 검색되는 방식을 제어하는 복잡한 계층적 구조입니다. 그 핵심 설계는 "모든 것은 파일이다" 라는 강력한 철학에 의해 주도됩니다.

이는 문서와 프로그램뿐만 아니라 하드웨어 장치, 네트워크 연결, 심지어 실행 중인 프로세스에 대한 정보까지도 파일로 취급된다는 것을 의미합니다.


핵심 철학: "모든 것은 파일이다" 📜

이것이 이해해야 할 가장 중요한 개념입니다. 리눅스에서는 모든 시스템 리소스를 나타내기 위해 다양한 유형의 "파일"이 사용됩니다.

이 철학이 강력한 이유는 ls, cat, grep, cp와 같은 동일한 도구 세트로 이 모든 다른 리소스와 통일된 방식으로 상호 작용할 수 있게 해주기 때문입니다.


가상 파일 시스템 (VFS) - 추상화 계층 🧩

리눅스는 네이티브 ext4부터 윈도우의 NTFS, macOS의 APFS에 이르기까지 수십 가지의 다양한 파일 시스템 유형을 지원해야 합니다. 이 복잡성은 가상 파일 시스템(VFS) 을 사용하여 관리됩니다.

VFS는 커널 내의 추상화 계층입니다. 애플리케이션이 어떤 파일 시스템과도 상호 작용하는 데 사용할 수 있는 단일하고 통일된 API를 제공합니다.

비유: VFS를 만능 전원 어댑터라고 생각해보세요. 텍스트 편집기와 같은 애플리케이션은 파일을 저장하기 위해 VFS에 "연결"하기만 하면 됩니다. 그러면 VFS는 "ext4 드라이버"와 통신해야 할지, "NTFS 드라이버"와 통신해야 할지를 파악하고, 해당 드라이버가 물리 디스크에 데이터를 쓰는 구체적인 세부 사항을 처리합니다.

이것이 바로 cp 명령어가 두 파일 시스템에 대해 아무것도 알 필요 없이 USB 스틱(FAT32)에서 하드 드라이브(ext4)로 파일을 복사할 수 있는 이유입니다.


파일 시스템 계층 표준 (FHS) - 디렉터리 구조 🗺️

대부분의 사용자가 파일 시스템으로 보는 것은 파일 시스템 계층 표준(FHS) 에 의해 정의된 표준 디렉터리 레이아웃입니다. 이 표준은 여러 리눅스 배포판에서 파일이 예측 가능한 위치에 있도록 보장합니다.

루트(/) 디렉터리 아래의 가장 중요한 디렉터리들은 다음과 같습니다.


아이노드 (Inode) - 파일의 "데이터 시트" 📇

이것은 리눅스가 파일을 추적하는 방식의 저수준 세부 사항입니다. 파일을 저장하면 두 가지가 생성됩니다.

  1. 데이터 블록: 하드 드라이브의 블록에 저장되는 파일의 실제 내용입니다.
  2. 아이노드: 파일에 대한 모든 메타데이터를 저장하는 데이터 구조입니다.

파일 이름은 디렉터리 파일에 있는, 아이노드 번호를 가리키는 사람이 읽을 수 있는 레이블일 뿐입니다. 아이노드가 파일의 진정한 표현입니다.

아이노드는 다음을 저장합니다.

중요하게도, 아이노드는 파일 이름을 저장하지 않습니다. 이 분리 구조가 하드 링크를 가능하게 합니다. 하드 링크는 디렉터리 내에서 정확히 동일한 아이노드 번호 를 가리키는 두 번째 파일 이름일 뿐입니다. 반면, 심볼릭 링크는 원본 파일의 텍스트 경로 를 내용으로 하는, 자신만의 아이노드를 가진 새로운 파일입니다.


일반적인 리눅스 파일 시스템 유형 🗄️

디스크를 포맷할 때 선택하는 "구체적인" 파일 시스템 형식입니다.

references